perm filename ARMFN[SYS,HE]1 blob
sn#004226 filedate 1972-11-02 generic text, type T, neo UTF8
00100 HOPEN: ;OPENS THE HAND TO SET POINT
00200 TRNN HCL
00300 JRST[ MOVEI TAC,=240 ;GO HERE FIRST TIME
00400 MOVEM TAC,HCNT ;MAX TIME TO SERVO THERE
00410 ADDI TAC,=60
00420 MOVEM TAC,COUNT
00500 HRLZ AC,@STKPTR ;REQUIRED OPENING
00600 MOVE MQ,[3.7]
00700 CAML AC,MQ
00800 MOVE AC,MQ ;NOT GREATER THAN 2.5
00900 MOVEM AC,RSET ;REQUIRED FINAL SET POINT
01000 PUSHJ P,HEAD ;READS THE HAND
01100 MOVE AC,HAND ;AND STORE IT HERE
01200 MOVEM AC,SET ;DYNAMIC SET POINT
01300 TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
01400 MOVE TAC,[0.06]
01500 CAML AC,RSET
01600 MOVN TAC,TAC
01700 MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
01800 TRO HCL ;SO THAT WE DON'T COME BACK HERE
01900 JUMPGE TAC,NXTJIF
02000 FSC TAC,-1 ;IF CLOSING GO SLOWER
02100 MOVEM TAC,DIR
02200 SKIPE SOTCH ;AND RESTORE TOUCH
02300 TRO STCH
02400 JRST NXTJIF]
02500 HSU: PUSHJ P, HEAD ;INCREMENTS SETPOINT AND SETS D/A
02600 ;LEAVES ARM DATAO IN TAC
02700 IFE HANDWORK <
02800 JRST NEXT
02900 >
03000 SOSGE HCNT
03100 JRST[ MOVEI AC,HTERR
03200 MOVEM AC,TRAJER
03300 POP P,AC
03400 JRST TOFF]
03500 SKIPE DIR
03600 JRST DAW ;IF NOT AT FINAL SET DRIVE ANYWAY
03700 MOVE AC,RSET
03800 FSBR AC,HAND ;CHECK ERROR TOLERANCE
03900 MOVM AC,AC
04000 FSBR AC,[0.05]
04100 JUMPLE AC,[ TRZ HCL
04200 TDZ DATWD,HANDAT
04300 JRST NEXT]
04400 DAW:
04500 IFN TRACK,<SKIPN WALK>
04600 DATAO ARM,DATWD ;DRIVE HAND
04700 JRST NXTJIF
04800
00100 HCLOSE:
00200 TRNN HCL ;ONLY ONCE
00300 JRST[ TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
00310 MOVEI TAC,=120
00320 MOVEM TAC,COUNT
00400 HRLZ AC,@STKPTR ;MINIMUN OPENING
00500 MOVEM AC,MINDST
00600 PUSHJ P,HEAD ;READ HAND
00700 MOVE AC,HAND
00800 MOVEM AC,SET
00900 MOVE TAC,[-0.10]
01000 MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
01100 MOVSI AC,(4.0)
01200 MOVNM AC,RSET ;FINAL SET POINT -1 SO AS TO SQUEEZE
01300 TRO HCL
01400 JRST NXTJIF]
01500 BB: PUSHJ P,HEAD
01600 IFE HANDWORK <
01700 JRST ER2
01800 >
01900 IFN TRACK,<SKIPN WALK>
02000 DATAO ARM,DATWD ;DRIVE HAND
02100 MOVE AC,HERR
02200 CAMG AC,[1.0]
02300 JRST NXTJIF ;IF ERROR LESS THAN 1 KEEP ON
02400 ER2: TRZ HCL
02500 TDZ DATWD,HANDAT
02600 SKIPE SOTCH ;RESTORE TOUCH
02700 TRO STCH
02800 MOVE AC,MINDST
02900 IFE USER,<CAMG AC,HAND>
03000 JRST NEXT
03100 MOVEI 1,GRASER ;IF LESS THAN MINOPENING GIVE ERROR
03200 MOVEM 1,TRAJER
03300 POP P,1
03400 JRST TOFF
03500
00100 HEAD: MOVEI K,HANDCHA
00200 IFE USER,<
00300 PUSHJ P,PREAD ;READ HAND CHANNEL
00400 LDB AC,SNUM
00500 ANDI DACVAL,7777
00600 ADDI AC,(DACVAL) ;ADD ALL THREE READINGS TOGETHER
00700 FSC AC,220
00800 FMPR AC,HSCALE
00900 FADR AC,HOFF
01000 MOVEM AC,HAND ;OPENING IN INCHES
01100 >
01200 IFN USER,<
01300 MOVE AC,HAND
01400 FADR AC,DIR
01500 SKIPG AC
01600 SETZ AC,
01700 MOVEM AC,HAND
01800 >
01900 IFN REPORT,<
02000 PUSH DATA,[<SIXBIT/HAND/>+1]
02100 PUSH DATA,HAND
02200 >
02300 SKIPN TAC,DIR
02400 JRST[ MOVE TAC,SET
02500 JRST GOTHER]
02600 FADRB TAC,SET ;INCREMENT SET POINT
02700 FSBR TAC,RSET ;NEGATIVE REMAINS TO GO
02800 FMPR TAC,DIR
02900 JUMPGE TAC,[ MOVE TAC,RSET ;GOT THERE
03000 MOVEM TAC,SET
03100 SETZM DIR
03200 JRST GOTHER]
03300 MOVE TAC,SET
00100 GOTHER: FSBR AC,TAC ;HAND SERVO
00200 EXCH AC,HERR
00300 FSBR AC,HERR
00400 FMPR AC,KVH
00500 MOVN TAC,HERR
00600 FMPR TAC,KEH
00700 FADR AC,TAC
00800 TDO DATWD,[HANDAT:XWD 4000,60]
00900 JUMPGE AC,.+2
01000 TRZ DATWD,40
01100 MOVM AC,AC
01200 FIX AC,211000
01300 CAILE AC,776000
01400 MOVEI AC,776000
01500 TRC AC,400000
01600 HRLI AC,6
01700 IFN DEB<
01800 MOVEM AC,HANDAW
01900 >
02000 IFN TRACK,<SKIPN WALK>
02100 DATAO WIDTH,AC
02200 POPJ P,
02300 HSCALE: 1.32
02400 HOFF: -0.81
02500 DIR: 0 ;CHANGE OF SETPOINT PER JIFFY
02600 SET: 0 ;DYNAMIC SET POINT
02700 RSET: 0 ;FINAL SET POINT
02800 MINDST: 0 ;MIN OPENING FOR CLOSE
02900 HERR: 0 ;HAND POSITION ERROR
03000 KEH: 5.0 ;ERROR GAIN
03100 KVH: 10.0 ;VELOCITY GAIN
03200 IFN DEB<
03300 HANDAW: 0
03400 >
03500
00100 PLACE: ;PLACE HAND ON TABLE
00200 TRNN DROP ;ONLY COME HERE ONCE
00300 JRST[ TRO DROP+RUN+VZERO
00310 MOVEI 1,=180
00320 MOVEM 1,COUNT
00400 HRRE 1,@STKPTR
00500 ADDI 1,(CBUF)
00600 HRLI 1,(1)
00700 HRRI 1,DELTH
00800 BLT 1,DELTH+5 ;CHANGE OF THETA PER JIFFY
00900 MOVEI 1,=12
01000 MOVEM 1,HCNT ;DON'T STOP FOR THE FIRST 12 JIFFIES
01100 MOVE DATWD,[770000252502]
01200 HRRZM DATWD,FBI
01300 JRST NXTJIF]
01400 SOSL HCNT
01500 JRST NXTJIF
01600 IFN USER,<JRST PLACED>
01700 EXL: MOVE AC,ET0+1
01800 FSC AC,1
01900 FSBR AC,VERR+1
02000 MOVM AC,AC ;AVERAGE OF LAST TWO JOINT 2 ERRORS
02100 CAML AC,PLER
02200 JRST PLACED
02300 JRST NXTJIF
02400 PLACED: JRST RUDONE
02600 PLER: 0.6
02700
00100 NUDGE: HRRE 1,@STKPTR ;DIFFERENTIAL CHANGE IN POSITION
00200 ADDI 1,(CBUF)
00300 HRLI 1,(1)
00400 HRRI 1,DELTH
00500 BLT 1,DELTH+5 ;CHANGE AND NUMBER OF TICKS TO DO IT
00600 HRRE 1,@STKPTR
00700 ADDI 1,6(CBUF)
00800 MOVE DATWD,14(1)
00900 HRRZM DATWD,FBI
01000 MOVE 2,15(1)
01100 MOVEM 2,NTICKS
01110 ADDI 2,=60
01120 MOVEM 2,COUNT
01200 HRLI 1,(1)
01300 HRRI 1,CI
01400 BLT 1,CII+5
01410 MOVEI I,5
01432 NCCA: MOVE AC,MOTARM(I)
01454 FADRM AC,CII(I)
01476 SOJGE I,NCCA
01500 TRO INCREM+RUN+VZERO+NUL
01600 SETZM TICKS
01700 SETZM FUNCT
01800 MOVEI I,5
01900 SGL: TDNE DATWD,BMASK(I)
02000 TDO DATWD,BMASK(I)
02100 SOJGE I,SGL
02200 JRST NXTJIF
02300
02400
02500 STOP: HRRE 1,@STKPTR
02600 ADDI 1,(CBUF)
02700 HRLI 1,(1)
02800 HRRI 1,STQ
02900 BLT 1,STQ+5
03200 MOVEI I,5
03300 SETZ AC,
03400 DSTQ: MOVE TAC,STQ(I)
03500 FDVR TAC,F0(I)
03600 MOVM MQ,TAC
03700 CAMGE MQ,[0.2]
03800 SETZB TAC,STQ(I)
03900 MOVEM TAC,STQ(I)
04000 FMPR TAC,TAC
04100 FADR AC,TAC
04200 SOJGE I,DSTQ
04400 MOVEM AC,SDTQ
04500 SETZM ASTPP
04600 TRO STP
04700 JRST NEXT
04800
04900 SAVE: HRRE AC,@STKPTR
05000 SOJL AC,.+2
05100 CAILE AC,11
05200 JRST[ MOVEI TAC,SAVERR
05300 MOVEM TAC,TRAJER
05400 JRST TOFF]
05500 IMULI AC,6
05600 HRRI TAC,DTHS(AC)
05700 HRRZI MQ,5(TAC)
05800 HRLI TAC,DTH
05900 BLT TAC,(MQ)
06000 JRST NEXT
06100
06200 RESTORE:HRRE AC,@STKPTR
06300 SOJL AC,.+2
06400 CAILE AC,11
06500 JRST[ MOVEI TAC,SAVERR
06600 MOVEM TAC,TRAJER
06700 JRST TOFF]
06800 IMULI AC,6
06900 HRRZI TAC,DTHS+5(AC)
06950 MOVEI I,5
07000 RESL: MOVE AC,(TAC)
07100 FADRM AC,DELTH(I)
07200 SOJ TAC,
07300 SOJGE I,RESL
07400 JRST NEXT
07500
07600 SET.ARM:HRRE I,@STKPTR
07700 ADDI I,(CBUF)
07800 HRRE AC,(I)
07900 SOJL AC,.+2
08000 CAIL AC,11
08100 JRST[ MOVEI TAC,SAVERR
08200 MOVEM TAC,TRAJER
08300 JRST TOFF]
08400 IMULI AC,6
08500 HRRI TAC,DTHS(AC)
08600 HRRZI MQ,5(TAC)
08700 HRLI TAC,1(I)
08800 BLT TAC,(MQ)
08900 JRST NEXT
09000
00100 CENTER: TRNN HCL
00200 JRST[ TRO HCL
00300 MOVEI TAC,=240
00400 MOVEM TAC,COUNT
00500 MOVSI AC,(4.0)
00600 MOVNM AC,RSET
00700 PUSHJ P,HEAD
00800 MOVE AC,SET
00900 TRZ STCH
01000 MOVE TAC,[-0.04]
01100 MOVEM TAC,DIR
01200 JRST NXTJIF]
01300 PUSHJ P,HEAD
01350 IFE HANDWORK,<JRST ER2>
01400 DATAO ARM,DATWD
01500 TRNN DROP
01600 JRST[ MOVEI I,1
01700 CFT: MOVE AC,OBS(I)
01800 JUMPG AC,[SETZM TOT
01900 SKIPN I
02000 AOS TOT
02100 TRO DROP+RUN+VZERO
02200 MOVE TAC,[-0.02]
02300 MOVEM TAC,DIR
02400 HRRE TAC,@STKPTR
02500 ADDI TAC,(CBUF)
02600 MOVE AC,(TAC)
02700 MOVEM AC,MINDST
02800 AOJ TAC,
02900 MOVEI I,DELTH
03000 OT: MOVE AC,(TAC)
03100 SKIPE TOT
03200 MOVNS AC
03300 MOVEM AC,(I)
03400 AOJ TAC,
03500 CAIGE I,DELTH+5
03600 AOJA I,OT
03700 MOVE TAC,[XWD 770000, 252500]
03800 HRRZM TAC,FBI
03900 IOR DATWD,TAC
03950 MOVEI I,4
03975 GETGO: PUSHJ P,NXTH
03987 SOJGE I,GETGO
04000 JRST NXTJIF]
04100 SOJGE I,CFT
04200 JRST NXTJIF]
04300 MOVE TAC,TOT
04400 SKIPG OBS(TAC)
04500 JRST NXTJIF
04600 TRZ DROP+RUN+FINAL
04700 PUSHJ P,SETSET
04800 TDZ DATWD,[XWD 770000,252500]
04900 MOVEI TAC,2
05000 MOVEM TAC,FUNCT
05100 JRST NXTJIF]
05200 TOT: 0
05300
05400 WOBBLE: HRLZ AC,@STKPTR
05500 MOVEM AC,WOBMAG
05600 MOVEI AC,1
05700 MOVEM AC,WOBCNT+2
05800 MOVEM AC,WOBCNT+1
05900 MOVEI AC,6
06000 MOVEM AC,WOBCNT
06100 MOVN AC,WOBMAG
06500 FADRM AC,DTH+3
06550 TRO WOB
06600 JRST NEXT
06700 WOBMAG: 0
06800 WOBCNT: BLOCK 3
06900 SIN: 0.0
07000 0.30902
07100 0.58779
07200 0.80902
07300 0.95106
07400 1.0
07500 0.95106
07600 0.80902
07700 0.58779
07800 0.30902
07900 0.0
08000 -0.30902
08100 -0.58779
08200 -0.80902
08300 -0.95106
08400 -1.0
08500 -0.95106
08600 -0.80902
08700 -0.58779
08800 -0.30902
00100 REFLEX: MOVEI I,1
00200 MOVEI K,65B23
00300 IFN USER,<POPJ P,>
00400 REX: PUSHJ P,PREAD
00500 LDB AC,[POINT 12,DACVAL,11]
00600 ADD AC,REF(I)
00700 MOVEM AC,OBS(I)
00800 RMOR: SOJGE I,REX
00900 TRNN STCH
01000 POPJ P,
01100 MOVEI I,1
01200 SIT: MOVE AC,OBS(I)
01300 JUMPG AC,[ LSH I,3
01400 IORI I,TOUCH
01500 MOVEM I,TRAJER
01600 POP P,I
01700 JRST TOFF]
01800 SOJGE I,SIT
01900 POPJ P,
02000
02100 REF: -1000
02200 -1000
02300 BLOCK 4
02400 OBS: BLOCK 2
02500 SOTCHS: 0
02600
02700 SETCH: MOVE AC,SOTCH
02800 MOVEM AC,SOTCHS
02900 HRLE AC,@STKPTR
03000 MOVEM AC,SOTCH
03100 JUMPE AC,NEXT
03200 TRO STCH
03300 JRST NEXT
03400
00100 XLIST
00200 LIT
00300 LIST
00400 END START